/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vccibernos;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.TreeMap;
import persistencia.PersistenciaAlquiler;
import persistencia.PersistenciaMovimiento;
//import vccibernos.Articulo;

/**
 *
 * @author JAVA
 */
public class GestionInformes {
    

    
    public static void informeEjemplares() {
        int i = 1;
        System.out.println("Informes de Ejemplares:");
        System.out.println("");
        System.out.println("1. Lista Mas Veces Alquilados");
        System.out.println("2. Lista Menos Veces Alquilados (al menos una vez)");
        System.out.println("0. Salir");
        //System.out.println("3. Lista menos Alquilados (incluidos ninguna vez");
        i = ObtenerTeclado.dameEntero("Introduce la Opcion: ");
        if (i != 0) {
            String res = "";
            TreeMap<Integer, ArrayList<Articulo>> mapa = new TreeMap<Integer, ArrayList<Articulo>>();
            int contador = 0;
            switch (i) {
                case 1:
                    //Los más alquilados son los que han estado menos dias sin alquilar. Se devuelven en una Lista no mas de 5
                    //listaArticulos.addAll(>>>Base de Datos<<<)
                    mapa = PersistenciaAlquiler.vecesAlquilados();
                    System.out.println("  Tipo      Nombre           Soporte    Proveedor      VecesAlquilados");
                    contador = 0;
                    do {
                        int indice = mapa.lastKey();
                        for (Articulo a : mapa.get(indice)) {
                            contador++;
                            res = "  ";
                            String tipo = "";
                            if (a instanceof Pelicula) {
                                tipo = "Película";
                            } else {
                                tipo = "Juego";
                            }
                            res = res + tipo;
                            String nombre = a.getTitulo();
                            for (int q = res.length(); q <= 11; q++) {
                                res = res + " ";
                            }
                            res = res + nombre;
                            String soporte = "";
                            if (a instanceof Juego) {
                                Juego juego = (Juego) a;
                                soporte = juego.getSoporte();
                            } else {
                                soporte = "-----";
                            }
                            for (int q = res.length(); q <= 29; q++) {
                                res = res + " ";
                            }
                            res = res + soporte;
                            String proveedor = a.getProve().getNombre();
                            for (int q = res.length(); q <= 40; q++) {
                                res = res + " ";
                            }
                            res = res + proveedor;
                            for (int q = res.length(); q <= 40; q++) {
                                res = res + " ";
                            }
                            res = res + indice;
                            System.out.println(res);
                        }
                        mapa.remove(indice);
                    } while (!mapa.isEmpty() || contador > 5);



                    break;
                case 2:
                    //Los menos alquilados son los que al menos se han alquilados una vez.
                    mapa = PersistenciaAlquiler.vecesAlquilados();
                    System.out.println("  Tipo      Nombre           Soporte    Proveedor");
                    contador = 0;
                    do {
                        int indice = mapa.lastKey();
                        for (Articulo a : mapa.get(indice)) {
                            contador++;
                            res = "  ";
                            String tipo = "";
                            if (a instanceof Pelicula) {
                                tipo = "Película";
                            } else {
                                tipo = "Juego";
                            }
                            res = res + tipo;
                            String nombre = a.getTitulo();
                            for (int q = res.length(); q <= 11; q++) {
                                res = res + " ";
                            }
                            res = res + nombre;
                            String soporte = "";
                            if (a instanceof Juego) {
                                Juego juego = (Juego) a;
                                soporte = juego.getSoporte();
                            } else {
                                soporte = "-----";
                            }
                            for (int q = res.length(); q <= 29; q++) {
                                res = res + " ";
                            }
                            res = res + soporte;
                            String proveedor = a.getProve().getNombre();
                            for (int q = res.length(); q <= 40; q++) {
                                res = res + " ";
                            }
                            res = res + proveedor;
                            for (int q = res.length(); q <= 40; q++) {
                                res = res + " ";
                            }
                            res = res + indice;
                            System.out.println(res);
                        }
                        mapa.remove(indice);
                    } while (!mapa.isEmpty() || contador > 5);
            }
        }
    }
    
    public static void informeAlquileres(){
        System.out.println("Informe de Alquileres");
        System.out.println("");
        System.out.println("1. Alquileres Pendientes ");
        System.out.println("2. Lista de Movimientos");
        //System.out.println("3. Informes de Facturas Realizadas (Falta Implementar!!)");
        int i=ObtenerTeclado.dameEntero("Introduce la Opcion: ");
        String res="";
        switch(i){
            case 1:
                //Buscar en Base de Datos Alquileres Fuera de Fecha. Devolver en una lista
                HashMap<Alquiler,Cliente> mapa=PersistenciaAlquiler.alquileresPendientes();
                //Buscar en Base de Datos Clientes asociados a Lista de Alquileres Fuera de Fecha. Devolver en una Lista
                if (!mapa.isEmpty()) {
                    System.out.println("IdArticulo   Artículo                      IdCliente   Cliente                Dni       ");
                    for (Alquiler a : mapa.keySet()) {
                        res="";
                        Cliente c = mapa.get(a);
                        int id = c.getId();
                        String nombreCliente = c.getNombre();
                        String dni = c.getDni();
                        String nomArticulo = a.getArticulo().getTitulo();
                        int codigo = a.getArticulo().getId();
                        res = res + codigo;
                        for (int q = res.length(); q <= 13; q++) {
                            res = res + " ";
                        }
                        res = res + nomArticulo;
                        for (int q = res.length(); q <= 43; q++) {
                            res = res + " ";
                        }
                        res = res + id;
                        for (int q = res.length(); q <= 55; q++) {
                            res = res + " ";
                        }
                        res = res + nombreCliente;
                        for (int q = res.length(); q <= 78; q++) {
                            res = res + " ";
                        }
                        res = res + dni;
                        for (int q = res.length(); q <= 88; q++) {
                            res = res + " ";
                        }
                        System.out.println(res);
                    }
                }else{
                    System.out.println("No existen Alquileres Pendientes en la Base de Datos!");
                }
                break;
            case 2:
                int j=1;
                ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();
                System.out.println("Lista de Movimientos");
                System.out.print("");
                do {
                    String opcion="";
                    do {
                        System.out.println("Menú Información Cliente----------------");
                        System.out.println("");
                        System.out.println("Busqueda por Criterio");
                        System.out.println("");
                        System.out.println("1. Buscar por Nombre");
                        System.out.println("2. Buscar por Apellido");
                        System.out.println("3. Buscar por Dni");
                        System.out.println("4. Busqueda por Id");
                        System.out.println("5. Busqueda por Nombre de Usuario");
                        System.out.println("0. Salir");
                        opcion = ObtenerTeclado.dameCadena("Selecciona la opcion: ");
                    } while (!"1".equals(opcion) && !"2".equals(opcion) && !"3".equals(opcion) && !"4".equals(opcion) && !"5".equals(opcion) && !"0".equals(opcion));
                        j=Integer.parseInt(opcion);

                    if (j != 0) {
                        System.out.println(" ");
                        String s = "";
                        switch (j) {
                            case 1:
                                //método para seleccionar un cliente por el nombre
                                s = ObtenerTeclado.dameCadena("Introduce el Nombre para la Búsqueda: ");
                                break;
                            case 2:
                                //método para seleccionar un cliente por el apellido
                                s = ObtenerTeclado.dameCadena("Introduce los Apellidos para la Búsqueda: ");
                                break;
                            case 3:
                                //método para seleccionar un cliente por el dni
                                s = ObtenerTeclado.dameCadena("Introduce el Dni para la Búsqueda: ");
                                break;
                            case 4:
                                //método para seleccionar un cliente por el pin de usuario
                                s = ObtenerTeclado.dameCadena("Introduce el Id para la Búsqueda: ");
                                break;
                            case 5:
                                //método para seleccionar un cliente por el nombre de usuario
                                s = ObtenerTeclado.dameCadena("Introduce el Nombre de Usuario para la Búsqueda: ");
                                break;

                            default:
                                System.out.println("\n Opcion incorrecta. ");
                                break;
                        }
                        listaClientes = GestionCliente.buscaClientes(j, s);
                        if (listaClientes.isEmpty()) {
                            System.out.println("No existe ningún Socion con esos Datos!!");
                        } else {
                            j = ObtenerTeclado.dameEntero("Introduce el Id del Cliente para Continuar ó Introduce 0 para Salir");
                            if (j != 0) {
                                Cliente c = GestionCliente.seleccionaCliente(listaClientes, j);
                                //Traer todos los alquileres realizados en el mes actual. Devolver una lista de Alquileres
                                List<Movimiento> listaMovimientos = PersistenciaMovimiento.mostrarMovimientos(c);
                                //Traer todas las tarifas vigentes. Devolver una lista de Tarifas
                                System.out.println("Movimientos del Cliente de Id: " + c.getId() + ", Nombre: " + c.getNombre());
                                System.out.println("IdMov.    Fecha        Descripcion                 SaldoAntiguo SaldoNuevo  Cantidad");
                                for (Movimiento movimiento : listaMovimientos) {
                                    res = "";
                                    res = res + movimiento.getId();
                                    for (int q = res.length(); q < 10; q++) {
                                        res = res + " ";
                                    }
                                    String fecha = movimiento.getFecha().getDay() + "/" + movimiento.getFecha().getMonth() + "/" + movimiento.getFecha().getYear();
                                    res = res + fecha;
                                    for (int q = res.length(); q < 23; q++) {
                                        res = res + " ";
                                    }
                                    if (movimiento.getConcepto().length() > 28) {
                                        String concepto = movimiento.getConcepto().substring(0, 27);
                                        res = res + concepto;
                                    } else {
                                        res = res + movimiento.getConcepto();
                                    }
                                    for (int q = res.length(); q < 51; q++) {
                                        res = res + " ";
                                    }
                                    res = res + movimiento.getSaldoAntiguo();
                                    for (int q = res.length(); q < 64; q++) {
                                        res = res + " ";
                                    }
                                    res = res + movimiento.getSaldoNuevo();
                                    for (int q = res.length(); q < 76; q++) {
                                        res = res + " ";
                                    }
                                    res = res + movimiento.getCantidad();
                                    System.out.println(res);
                                }
                            }
                        }
                    }
                } while (j != 0 && listaClientes.isEmpty());
                break;
            case 3:
                
        }
    }
    /*
     * 
    public static void informeClientes(){
        System.out.println("Informe de Clientes");
        System.out.println("");
        System.out.println("1. Clientes Vip");
        System.out.println("2. Clientes Preferentes");
        int i=ObtenerTeclado.dameEntero("Introduce la Opcion: ");
        switch(i){
            case 1:
                int k=1;
                //Traer de la Base de Datos todos los Clientes Vip
                ArrayList<Cliente> listaClientesVip=new ArrayList<Cliente>();
                int j=1;
                for(Cliente c:listaClientesVip){
                    System.out.println("Nº "+j+", Nombre: "+c.getNombre()+", Apodo: "+c.getNomUsuario()+", Dni: "+c.getDni());
                    if(j%5==0){k=ObtenerTeclado.dameEntero("Continuar?? Si(1),No(0)");}
                    if(k==0){break;}
                }
                break;
            case 2:
                //Traer de la Base de Datos los Clientes qeu hayan Gastado más por nº de dias. Devolver una lista de Clientes
                ArrayList<Cliente> listaClientes=new ArrayList<Cliente>();
                j=1;
                k=1;
                for(Cliente c:listaClientes){
                    System.out.println("Nº "+j+", Nombre: "+c.getNombre()+", Apodo: "+c.getNomUsuario()+", Dni: "+c.getDni());
                    if(j%5==0){k=ObtenerTeclado.dameEntero("Continuar?? Si(1),No(0)");}
                    if(k==0){break;}
                }
                break;
        }
    }
    */
}
